#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "queue.h"
#include "semphr.h"
#include "event_groups.h"
#include "FreeRTOSConfig.h"

#include "gpio.h"
static void Gpio_Config(void);

 void vTask1(void *pvParameters)
 {
    while (1)
    { 
		taskENTER_CRITICAL();
		printf("vTask1\r\n");
		taskEXIT_CRITICAL();
		vTaskDelay(1);
    }
 }
 
 void vTask2(void *pvParameters)
 {
    while (1)
    {
		taskENTER_CRITICAL();
		printf("vTask2\r\n");
		taskEXIT_CRITICAL();
		vTaskDelay(1);
    }
 }

int32_t main(void)
{
	Gpio_Config();
	Debug_UartInit();
	xTaskCreate(vTask1, "Task1", 64, NULL, 1, NULL);           /* 创建任务1 */
	xTaskCreate(vTask2, "Task2", 64, NULL, 1, NULL);           /* 创建任务2 */
	vTaskStartScheduler();                                      /* 启动任务调度 */
	while(1);
}


/* CPU IO口配置（包含LED灯和按键的配置）*/
static void Gpio_Config(void)
{
    stc_gpio_config_t stcGpioCfg;
	
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);     /* 打开GPIO外设时钟门控 */
    
    stcGpioCfg.enDir = GpioDirIn;                               /* 端口方向配置->输入 */    
    stcGpioCfg.enDrv = GpioDrvL;                                /* 端口驱动能力配置->高驱动能力 */
    //stcGpioCfg.enPuPd = GpioPu;                                 /* 端口上下拉配置->上拉 */
    stcGpioCfg.enOD = GpioOdDisable;                            /* 端口开漏输出配置->开漏输出关闭 */
    stcGpioCfg.enCtrlMode = GpioAHB;                            /* 端口输入/输出值寄存器总线控制模式配置->AHB */
    
    Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg);                /* GPIO IO PD04初始化(PD04在STK上外接KEY(USER)) */
    
    stcGpioCfg.enDir = GpioDirOut;                              /* 端口方向配置->输出(其它参数与以上（输入）配置参数一致) */
    stcGpioCfg.enPuPd = GpioPd;                                 /* 端口上下拉配置->下拉 */

    Gpio_Init(GpioPortA, GpioPin11, &stcGpioCfg);                /* GPIO IO PD05初始化(PD05在STK上外接LED(LED3)) */
}

